# bash constants
https://www.opennet.ru/docs/RUS/bash_scripting_guide/c3270.html

## $BASH путь к исполняемому файлу Bash

## $BASH_VERSINFO[n] это массив, состоящий из 6 элементов, и содержащий информацию о версии Bash.
 Очень похожа на переменную $BASH_VERSION, описываемую ниже.

    # BASH_VERSINFO[0] = 2                      # Major version no.
    # BASH_VERSINFO[1] = 05                     # Minor version no.
    # BASH_VERSINFO[2] = 8                      # Patch level.
    # BASH_VERSINFO[3] = 1                      # Build version.
    # BASH_VERSINFO[4] = release                # Release status.
    # BASH_VERSINFO[5] = i386-redhat-linux-gnu  # Architecture
                                               # (same as $MACHTYPE).

## $BASH_VERSION версия Bash, установленного в системе

    bash$ echo $BASH_VERSION
    2.04.12(1)-release
                


    tcsh% echo $BASH_VERSION
    BASH_VERSION: Undefined variable.

## $DIRSTACK  содержимое вершины стека каталогов (который управляется командами pushd и popd)

Эта переменная соответствует команде dirs, за исключением того, что dirs показывает полное содержимое всего стека каталогов.

## $EDITOR заданный по-умолчанию редактор, вызываемый скриптом, обычно vi или emacs.

## $EUID "эффективный" идентификационный номер пользователя (Effective User ID)

Идентификационный номер пользователя, права которого были получены, возможно с помощью команды su.

Значение переменной $EUID необязательно должно совпадать с содержимым переменной $UID.

## $FUNCNAME имя текущей функции

## $GLOBIGNORE Перечень шаблонных символов, которые будут проигнорированы при выполнении подстановки имен файлов (globbing) .

## $GROUPS группы, к которым принадлежит текущий пользователь

## $HOME домашний каталог пользователя, как правило это /home/username (см. Пример 9-13)

## $HOSTNAME Сетевое имя хоста устанавливается командой hostname во время исполнения инициализирующих сценариев на загрузке системы.

Внутренняя переменная $HOSTNAME Bash получает свое значение посредством вызова функции gethostname(). См. так же Пример 9-13.

## $HOSTTYPE тип машины

Подобно $MACHTYPE, идентифицирует аппаратную архитектуру.

## $IFS разделитель полей во вводимой строке (IFS -- Input Field Separator) 

По-умолчанию -- пробельный символ (пробел, табуляция и перевод строки), но может быть изменен, например, для разбора строк, в которых отдельные поля разделены запятыми. Обратите внимание: при составлении содержимого переменной $*, Bash использует первый символ из $IFS для разделения аргументов. См. Пример 5-1.

    bash$ echo $IFS | cat -vte
    $
    bash$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
    w:x:y:z

## $LC_COLLATE эта переменная задает порядок сортировки символов,

Чаще всего устанавливается в .bashrc или /etc/profile, эта переменная задает порядок сортировки символов, в операциях подстановки имен файлов и в поиске по шаблону. При неверной настройке переменной LC_COLLATE можно получить весьма неожиданные результаты.

Начиная с версии 2.05, Bash, в операциях подстановки имен файлов, не делает различий между символами верхнего и нижнего регистров, в диапазонах символов в квадратных скобках. Например,, ls [A-M]* выведет как File1.txt, так и file1.txt. Возврат к общепринятому стандарту поведения шаблонов в квадратных скобках выполняется установкой переменной LC_COLLATE в значение C командой export LC_COLLATE=C в файле /etc/profile и/или ~/.bashrc.

## $LC_CTYPE Эта внутренняя переменная определяет кодировку символов. Используется в операциях подстановки и поиске по шаблону.

## $LINENO Номер строки исполняемого сценария

Номер строки исполняемого сценария. Эта переменная имеет смысл только внутри исполняемого сценария и чаще всего применяется в отладочных целях.

    # *** BEGIN DEBUG BLOCK ***
    last_cmd_arg=$_  # Запомнить.

    echo "Строка $LINENO: переменная \"v1\" = $v1"
    echo "Последний аргумент командной строки = $last_cmd_arg"
    # *** END DEBUG BLOCK ***

## $MACHTYPE аппаратная архитектура

    bash$ echo $MACHTYPE
    i686

## $OLDPWD прежний рабочий каталог ("OLD-Print-Working-Directory")

## $OSTYPE тип операционной системы

    bash$ echo $OSTYPE
    linux

## $PATH путь поиска, как правило включает в себя каталоги /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, и т.д.

    bash$ echo $PATH
    /bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/sbin:/usr/sbin

Инструкция PATH=${PATH}:/opt/bin добавляет каталог /opt/bin в конец текущего пути поиска. Иногда может оказаться целесообразным, внутри сценария, временно добавить какой-либо каталог к пути поиска. По завершении работы скрипта, эти изменения будут утеряны (вспомните о том, что невозможно изменить переменные окружения вызывающего процесса)

## $PIPESTATUS Код возврата канала (конвейера)

Код возврата канала (конвейера). Интересно, что это не то же самое, что код возврата последней исполненной команды.

In script:
    who | grep nobody | sort
    echo ${PIPESTATUS[*]}
    0 1 0

In CLI:
bash$ echo $PIPESTATUS
0

bash$ ls -al | bogus_command
bash: bogus_command: command not found
bash$ echo $PIPESTATUS
141

bash$ ls -al | bogus_command
bash: bogus_command: command not found
bash$ echo $?
127

tcsh% bash

bash$ who | grep nobody | sort
bash$ echo ${PIPESTATUS[*]}
0

Переменная $PIPESTATUS может давать неверные значения при вызове из командной строки.

## $PPID Переменная $PPID хранит PID (идентификатор) родительского процесса. [1]

## $PS1 prompt, приглашение командной строки.

## $PS2 Вторичное приглашение командной строки, 
выводится тогда, когда от пользователя ожидается дополнительный ввод. Отображается как ">".

## $PS3 Третичное приглашение (prompt), in select
 выводится тогда, когда пользователь должен сделать выбор в операторе select (см. Пример 10-29).

## $PS4 Приглашение (prompt) вызывается с ключом -x
 четвертого уровня, выводится в начале каждой строки вывода тогда, когда сценарий вызывается с ключом -x. Отображается как "+".

## $REPLY default variable for command "read" если явно не задана другая переменная

## $SECONDS Время работы сценария в секундах.

## $SHELLOPTS список допустимых опций интерпретатора shell.

bash$ echo $SHELLOPTS
braceexpand:hashall:histexpand:monitor:history:interactive-comments:emacs

## $SHLVL Уровень вложенности shell

Уровень вложенности shell. Если в командной строке
echo $SHLVL
дает 1, то в сценарии значение этой переменной будет больше на 1, т.е. 2.

## $TMOUT only!!! интерпретатор not script будет ожидать ввод не более чем заданное число секунд

Если переменная окружения $TMOUT содержит ненулевое значение, то интерпретатор будет ожидать ввод не более чем заданное число секунд, что, в первичном приглашении (см. описание PS1 выше), может привести к автоматическому завершению сеанса работы.

## $UID UID (идентификатор) текущего пользователя, в соответствии с /etc/passwd